home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Baby Buggy.lua < prev    next >
Text File  |  2010-09-22  |  6KB  |  185 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Baby Buggy + Projectile Baby Buggy
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, September 2010, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.babybuggy={}
  10. cc.babybuggy.babybuggy={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.babybuggy.gfx_wpn=loadgfx("weapons/babybuggy.bmp")                    -- Weapon Image
  14. setmidhandle(cc.babybuggy.gfx_wpn)
  15. cc.babybuggy.gfx_wpnc=loadgfx("weapons/babybuggyc.bmp")                    -- Weapon Collision Image
  16. setmidhandle(cc.babybuggy.gfx_wpnc)
  17. cc.babybuggy.sfx_cry=loadsfx("babycry.ogg")                                -- Attack Sound
  18.  
  19. --------------------------------------------------------------------------------
  20. -- Weapon: Baby Buggy
  21. --------------------------------------------------------------------------------
  22.  
  23. cc.babybuggy.id=addweapon("cc.babybuggy","Baby Buggy",cc.babybuggy.gfx_wpn,0,2)    -- Add Weapon (0 uses, first in round 2)
  24.  
  25. function cc.babybuggy.draw()                                            -- Draw
  26.     -- Draw
  27.     if weapon_shots<=0 then
  28.         -- Info
  29.         hudinfo("Hit [Space] once to launch the baby buggy (launch it at a downward slope!)")
  30.         if getplayeraction(0)==0 then
  31.             setblend(blend_alpha)
  32.             setalpha(1)
  33.             setcolor(255,255,255)
  34.             setscale(getplayerdirection(0),1)
  35.             setrotation(-(20+math.sin(os.clock()*15)*5)*getplayerdirection(0))
  36.             drawimage(cc.babybuggy.gfx_wpn,getplayerx(0)+getplayerdirection(0)*7,getplayery(0)-5)
  37.         end
  38.     end
  39. end
  40.  
  41. function cc.babybuggy.attack(attack)                                    -- Attack
  42.     if (weapon_shots<=0) then
  43.         -- Fire a projectile (on release/full charge)
  44.         if (attack==1) then
  45.             -- No more weapon switching!
  46.             useweapon(0)
  47.             -- No more player control!
  48.             playercontrol(0)
  49.             -- Set Round Time (15 sec)
  50.             secondsleft=math.floor(getframesleft()/50)
  51.             changeturntime(15-secondsleft)
  52.             -- Launch
  53.             weapon_shots=weapon_shots+1
  54.             id=createprojectile(cc.babybuggy.babybuggy.id)
  55.             projectiles[id]={}
  56.             -- Ignore collision with current player at beginning
  57.             projectiles[id].ignore=playercurrent()
  58.             -- Set initial position of projectile
  59.             projectiles[id].x=getplayerx(0)+getplayerdirection(0)*8
  60.             projectiles[id].y=getplayery(0)-3
  61.             if collision(cc.babybuggy.gfx_wpnc,projectiles[id].x,projectiles[id].y)==1 then
  62.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  63.                     projectiles[id].x=getplayerx(0)
  64.                 end
  65.             end
  66.             projectiles[id].px=projectiles[id].x
  67.             projectiles[id].py=projectiles[id].y
  68.             -- Set Speeds
  69.             projectiles[id].sy=0
  70.             -- Set direction of projectile
  71.             projectiles[id].dir=getplayerdirection(0)
  72.             -- Animation
  73.             projectiles[id].frame=0
  74.             projectiles[id].timer=0
  75.             -- Timer
  76.             weapon_timer=50
  77.             -- Cry
  78.             playsound(cc.babybuggy.sfx_cry)
  79.         end
  80.     end
  81. end
  82.  
  83. --------------------------------------------------------------------------------
  84. -- Projectile: Baby Buggy
  85. --------------------------------------------------------------------------------
  86.  
  87. cc.babybuggy.babybuggy.id=addprojectile("cc.babybuggy.babybuggy")        -- Add Projectile
  88.  
  89. function cc.babybuggy.babybuggy.draw(id)                                -- Draw
  90.     -- Setup draw mode
  91.     setblend(blend_alpha)
  92.     setalpha(1)
  93.     setcolor(255,255,255)
  94.     setscale(projectiles[id].dir,1)
  95.     -- Calculate projectile rotation
  96.     if projectiles[id].dir==1 then
  97.         setrotation(math.deg(math.atan2(projectiles[id].x-projectiles[id].px,-(projectiles[id].y-projectiles[id].py)))+270)
  98.     else
  99.         setscale(1,-1)
  100.         setrotation(math.deg(math.atan2(projectiles[id].x-projectiles[id].px,-(projectiles[id].y-projectiles[id].py)))-90)
  101.     end
  102.     -- Draw projectile
  103.     drawimage(cc.babybuggy.gfx_wpn,projectiles[id].x,projectiles[id].y)
  104.     -- Draw Arrow if out of Screen
  105.     outofscreenarrow(projectiles[id].x,projectiles[id].y)
  106. end
  107.  
  108. function cc.babybuggy.babybuggy.update(id)                                -- Update
  109.     -- Save old position (for rotation calculation)
  110.     if getframe()%5==0 then
  111.         projectiles[id].px=projectiles[id].x
  112.         projectiles[id].py=projectiles[id].y
  113.     end
  114.     -- Timer
  115.     weapon_timer=weapon_timer-1
  116.     -- Move Left/Right
  117.     local explode=0
  118.     projectiles[id].x=projectiles[id].x+projectiles[id].dir*2.5
  119.     if collision(cc.babybuggy.gfx_wpnc,projectiles[id].x,projectiles[id].y)==1 then
  120.         if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  121.             -- Upwards/Downwards space?
  122.             local doturn=1
  123.             for i=1,3,1 do
  124.                 if collision(cc.babybuggy.gfx_wpn,projectiles[id].x,projectiles[id].y+i)==0 then
  125.                     doturn=0; projectiles[id].ignore=0 projectiles[id].y=projectiles[id].y+i; break
  126.                 elseif terraincollision()==0 and objectcollision()==0 and playercollision()==projectiles[id].ignore then
  127.                     doturn=0; projectiles[id].y=projectiles[id].y+i; break
  128.                 end
  129.             end
  130.             if doturn==1 then
  131.                 explode=1
  132.             end
  133.         end
  134.     else
  135.         projectiles[id].ignore=0
  136.     end
  137.     -- Fall Down
  138.     projectiles[id].sy=projectiles[id].sy+getgravity()
  139.     msubt=math.ceil(math.abs(projectiles[id].sy)/3)
  140.     msuby=projectiles[id].sy/msubt
  141.     for i=1,msubt,1 do
  142.         projectiles[id].y=projectiles[id].y+msuby
  143.         -- Collision
  144.         if collision(cc.babybuggy.gfx_wpnc,projectiles[id].x,projectiles[id].y)==1 then
  145.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  146.                 projectiles[id].sy=0
  147.                 projectiles[id].y=projectiles[id].y-msuby
  148.                 break
  149.             end
  150.         else
  151.             projectiles[id].ignore=0
  152.         end
  153.         -- Water
  154.         if (projectiles[id].y)>getwatery()-30 then
  155.             stopchannel(0)
  156.             -- Effects
  157.             particle(p_waterhit,projectiles[id].x,projectiles[id].y)
  158.             playsound(sfx_hitwater4)
  159.             -- Free projectile
  160.             freeprojectile(id)
  161.             -- End Turn
  162.             endturn()
  163.             return
  164.         end
  165.     end
  166.     -- Timer / Explode
  167.     if getframesleft()<5 or explode==1 then
  168.         stopchannel(0)
  169.         -- Splatter
  170.         playsound(sfx_splatter1)
  171.         -- Cause damage
  172.         arealdamage(projectiles[id].x,projectiles[id].y,175,75)
  173.         -- Destroy terrain
  174.         terrainexplosion(projectiles[id].x,projectiles[id].y,90,1)
  175.         -- Crater
  176.         grey=math.random(0,40)
  177.         terrainalphaimage(gfx_crater200,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  178.         -- Free projectile
  179.         freeprojectile(id)
  180.         -- End Turn
  181.         endturn()
  182.     end
  183.     -- Scroll to projectile
  184.     scroll(projectiles[id].x,projectiles[id].y)
  185. end